return gbfgetcstr(fin);
}
else {
- char buff[4];
-#ifdef WORDS_BIGENDIAN
- be_write32(buff, tag->offs);
-#else
- le_write32(buff, tag->offs);
-#endif
+ char buff[5];
+ if (fin->big_endian) be_write32(buff, tag->offs);
+ else le_write32(buff, tag->offs);
+ if (tag->count < 5) buff[tag->count] = '\0';
+ else buff[4] = '\0';
return xstrdup(buff);
}
}
switch(tag->tag) {
case 0x0001: /* GPSLatitudeRef */
- lat_ref = tag->offs & 127;
+ str = exif_read_string(tag);
+ lat_ref = *str & 127;
+ xfree(str);
break;
case 0x0002: /* GPSLatitude */
wpt->latitude = exif_read_coord(tag);
break;
- case 0x0003: /* GPSLongitude */
- lon_ref = tag->offs & 127;
+ case 0x0003: /* GPSLongitudeRef */
+ str = exif_read_string(tag);
+ lon_ref = *str & 127;
+ xfree(str);
break;
case 0x0004: /* GPSLongitude */
break;
case 0x000a: /* GPSMeasureMode */
- mode = tag->offs & 127;
+ str = exif_read_string(tag);
+ mode = *str & 127;
+ xfree(str);
break;
case 0x000b: /* GPSDOP */
break;
case 0x000c: /* GPSSpeedRef */
- speed_ref = tag->offs & 127;
+ str = exif_read_string(tag);
+ speed_ref = *str & 127;
+ xfree(str);
break;
case 0x000d: /* GPSSpeed */
wpt = NULL;
}
- if (! wpt) continue;
+ if (! wpt) return;
#if 0
if (timestamp != (SECONDS_PER_DAY * 99)) {